﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
// 原题连接：https://leetcode.cn/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/
/*
题目描述：
输入一个链表的头节点，从尾到头反过来返回每个节点的值（用数组返回）。

示例 1：
输入：head = [1,3,2]
输出：[2,3,1]
 

限制：
0 <= 链表长度 <= 10000
*/


// Definition for singly-linked list.
struct ListNode {
	int val;
	struct ListNode *next;
};
 
// 开始解题：
// 方法1——逆序拷贝
int* reversePrint(struct ListNode* head, int* returnSize) {
    struct ListNode* cur = head;
    // 先算出链表的长度
    int len = 0;
    while (cur) {
        len++;
        cur = cur->next;
    }
    *returnSize = len;

    // 再创建数组
    int* answer = (int*)malloc(len * sizeof(int));
    if (NULL == answer) {
        perror("malloc fail");
        return NULL;
    }
    int n = len;
    cur = head;
    while (cur) {
        answer[n - 1] = cur->val;
        n--;
        cur = cur->next;
    }
    return answer;
}

